
import java.awt.Font;//字体
import java.awt.event.ActionEvent;//活动事件
import java.awt.event.ActionListener;//活动事件的监听
import java.io.BufferedReader;/*这个类就是一个包装类，它可以包装字符流，将字符流放入缓存里,
先把字符读到缓存里，到缓存满了或者你flush的时候，再读入内存，就是为了提供读的效率而设计的。*/
import java.io.FileReader;//文件读取包
import java.util.ArrayList;//可变长的数组列表
import java.util.Collections;
import java.util.List;//列表

import javax.swing.JButton;
import javax.swing.JFrame;
import javax.swing.JLabel;
import javax.swing.JOptionPane;
import javax.swing.Timer;
import java.io.BufferedWriter;
import java.io.File;
import java.io.FileWriter;
import java.util.Date;
import java.text.SimpleDateFormat;

public class Call extends JFrame{ //主体框架
	
	/**
	 * 
	 */
	private static final long serialVersionUID = 1L;//很难理解，暂定为 固定模式
	private List<String> names = new ArrayList<String>();//定义一个变长数组来存放文本
	private JLabel label = null;//初始化一个显示标签
	private Timer timer = null;//定义一个私有的计时器
	private int index = 0;//定义一个索引
	
	public Call() {//设置主窗体的参数
		this.setTitle("15物联网班");//设置标题
		this.setSize(500, 300);//设置框体大小
		this.setResizable(false);//窗口是否能被拉伸
		this.setLocationRelativeTo(null);/*设置窗口相对于指定组件的位置。
如果组件当前未显示或者 c 为 null，则此窗口将置于屏幕的中央。
中点可以使用 GraphicsEnvironment.getCenterPoint 确定。*/
		this.setDefaultCloseOperation(JFrame.EXIT_ON_CLOSE);//设置关闭按钮
		this.setLayout(null);//清空布局以便可以加载组件
		
		getNames();//函数
		
		init();//函数
		this.setVisible(true);//设置窗体是否可见
	}
	
	
	public void init() {
		JButton startBtn = new JButton("Start");//创建 按钮，按钮标签为Start
		startBtn.setBounds(100, 200, 100, 40);//设置按钮的大小以及位置，（x，y，长，宽）
		this.add(startBtn);//将按钮组件放置到大窗体中去
		
		JButton stopBtn = new JButton("stop");//同上，为结束按钮
		stopBtn.setBounds(300, 200, 100, 40);
		this.add(stopBtn);
		
		JButton recordBtn = new JButton("record");//创建record按钮
		recordBtn.setBounds(210, 150, 80, 40);
		this.add(recordBtn);
		
		label = new JLabel("15物联网班", JLabel.CENTER);//设置标签，格式（文本，图标，位置）
		label.setBounds(100, 80, 300, 30);//设置标签大小以及位置
		label.setFont(new Font(Font.DIALOG, Font.BOLD, 24));
		/*
		 DIALOG:字体样式，本处未设置(可根据需要进行修改)，bold，粗体，字号
		 * */
		this.add(label);//添加到大窗体中去
		
		
		timer = new Timer(10, new ActionListener() {/*Timer(int delay延迟时间,
		 ActionListener listener动作监听器)*/
			@Override
			public void actionPerformed(ActionEvent e) {// 事件响应，例如点击按钮
				//文本框里按回车，就会进行响应
				// TODO Auto-generated method stub
				label.setText(names.get(index));//设置标签内容为names函数中获取到的文字
				index++;//index为总行数，因为需要不断的循环，因此要进行自加
				if (index == names.size()) {//当行数达到最大时，需要重重头开始
					index = 0;//因此，将0重新赋值给index
				}
			}
		});
		
		startBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				timer.start();
			}
		});
		
		stopBtn.addActionListener(new ActionListener() {
			@Override
			public void actionPerformed(ActionEvent e) {
				// TODO Auto-generated method stub
				timer.stop();
			}
		});
		
		SimpleDateFormat df = new SimpleDateFormat("yyyy-MM-dd");//设置日期格式
		recordBtn.addActionListener(new ActionListener() {//记录没到的人

			@Override
			public void actionPerformed(ActionEvent arg0) {
				// TODO Auto-generated method stub
				if(index==0) {
					JOptionPane.showMessageDialog(null, "Please click start");//避免index为造成-1错误
				}
				else {
			contentToTxt("record.txt",df.format(new Date())+"    "+names.get(index-1));
			JOptionPane.showMessageDialog(null, "Record succeed!");
			}}
		});
	}
	
		
	
	public void getNames() {
//		names.add("1");
//		names.add("2");
//		names.add("3");
	
		try {
			BufferedReader br = new BufferedReader(new FileReader("test.txt"));
			String name = br.readLine();
			while(name != null) {
				names.add(name);
				name = br.readLine();
			}
		} catch (Exception e) {//进行异常捕捉
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		
	}
	
	public static void contentToTxt(String filePath, String content) {//将记录写入record文件
        try{
            BufferedWriter writer = new BufferedWriter(new FileWriter(new File(filePath),true));
            writer.write("\r\n"+content);
            writer.close();
        }catch(Exception e){
            e.printStackTrace();}
        }
	
	public static void main(String[] args) {//主函数入口
		// TODO Auto-generated method stub
		new Call();
		
	}
	
}